package yz_service

import (
	"fmt"
	"peilian-api/app/global/variable"
	"peilian-api/utils/tools"
	"time"
)

type YzBase struct{}

type AddressInfo struct {
	AddressExtra       string    `json:"address_extra"`
	DeliveryAddress    string    `json:"delivery_address"`
	DeliveryCity       string    `json:"delivery_city"`
	DeliveryDistrict   string    `json:"delivery_district"`
	DeliveryEndTime    time.Time `json:"delivery_end_time"`
	DeliveryPostalCode string    `json:"delivery_postal_code"`
	DeliveryProvince   string    `json:"delivery_province"`
	DeliveryStartTime  time.Time `json:"delivery_start_time"`
	ReceiverName       string    `json:"receiver_name"`
	ReceiverTel        string    `json:"receiver_tel"`
	SelfFetchInfo      string    `json:"self_fetch_info"`
}

// 订单买家信息结构体
type BuyerInfoDetail struct {
	BuyerId        int    `json:"buyer_id"`
	YzOpenId       string `json:"yz_open_id"`
	BuyerPhone     string `json:"buyer_phone"`
	BuyerRealPhone string `json:"buyer_real_phone"`
	OuterUserId    string `json:"outer_user_id"`
}

type OrdersDetail struct {
	Alias      string `json:"alias"`
	ItemId     int64  `json:"item_id"`
	Num        int    `json:"num"`
	Oid        string `json:"oid"`
	OuterSkuId string `json:"outer_sku_id"`
	Title      string `json:"title"`
	Price      string `json:"price"`
}
type OrderInfoDetail struct {
	Created     string `json:"created"`
	StatusStr   string `json:"status_str"`
	Status      string `json:"status"`
	ExpressType int    `json:"express_type"`
	CloseType   int    `json:"close_type"`
	ConfirmTime string `json:"confirm_time"`
	ConsignTime string `json:"consign_time"`
	ExpiredTime string `json:"expired_time"`
	PayTime     string `json:"pay_time"`
	PayType     int    `json:"pay_type"`
	SuccessTime string `json:"success_time"`
	Tid         string `json:"tid"`
	Type        int    `json:"type"`
	UpdateTime  string `json:"update_time"`
}

// 交易物流信息结构体
// type DeliveryOrder struct {
// 	ExpressState uint `json:"sexpress_state"`
// 	ExpressType  uint `json:"express_type"`
// 	PkId         uint `json:"pk_id"`
// }

// 交易基础信息结构体
type FullOrderInfo struct {
	BuyerInfo       *BuyerInfoDetail `json:"buyer_info"`
	OrdersDetail    []OrdersDetail   `json:"orders"`
	OrderInfoDetail *OrderInfoDetail `json:"order_info"`
}

// 创建消息
type MsgInfoCreate struct {
	Foi *FullOrderInfo `json:"full_order_info"`
}

// 交易支付
type MsgInfoPay struct {
	Foi *FullOrderInfo `json:"full_order_info"`
}

// 关闭消息
type MsgInfoClose struct {
	UpdateTime  string `json:"update_time"`
	CloseReason string `json:"close_reason"`
	Tid         string `json:"tid"`
	CloseType   int    `json:"close_type"`
}

// 消息请求头
type ParamBaseReq struct {
	Msg       string `json:"msg"`
	KdtName   string `json:"kdt_name"`
	Sign      string `json:"sign"`
	Type      string `json:"type"`
	SendCount int    `json:"send_count"`
	Version   int64  `json:"version"`
	ClientId  string `json:"client_id"`
	Mode      int    `json:"mode"`
	KdtId     int64  `json:"kdt_id"`
	Id        string `json:"id"`
	MsgId     string `json:"msg_id"`
	RootKdtId int64  `json:"root_kdt_id"`
	Status    string `json:"status"`
}

// token 字段解析
type TokenInfo struct {
	AccessToken string `json:"access_token"`
	AuthorityId string `json:"authority_id"`
	Expires     int64  `json:"expires"`
	Scope       string `json:"scope"`
}

type ItemsInfo struct {
	ItemId     int64    `json:"item_id"`
	Alias      string   `json:"alias"`
	ClassId    string   `json:"classid"`
	CreateTime string   `json:"created_time"`
	GroupNames []string `json:"group_names"`
	Images     string   `json:"image"`
	Origin     string   `json:"origin"`
	PageUrl    string   `json:"page_url"`
	Price      uint     `json:"price"`
	Title      string   `json:"title"`
	UpdateTime string   `json:"update_time"`
}

// 销售中的商品的信息
type SearchItemInfo struct {
	Count int         `json:"count"`
	Items []ItemsInfo `json:"items"`
}

// 解析消息头
func (*YzBase) VerificationSign(sign, msg string) error {
	if tools.Md5DataString(fmt.Sprintf("%s%s%s", variable.Config.Yz.ClientId, msg, variable.Config.Yz.ClientSecret)) != sign {
		// 判断消息是否合法
		return fmt.Errorf("消息不合法")
	}
	return nil
}
